Java под нагрузкой: JVM с профилированием и оптимизацией приложений в облаках от Otus
Вы научитесь
Программа курса
Курс создан для разработчиков с как минимум двухлетним опытом работы. После этого курса вы сможете браться за более трудновыполнимые задачи.
Java Virtual Machine (JVM)
В данной теме вы узнаете о различиях между разными версиями Java (11, 17, 21), а также о различиях между OpenJDK и OracleJDK. Будет рассмотрено, как выбрать подходящую версию для вашего проекта. Здесь вы погрузитесь в мир байткода: промежуточного кода, который генерируется компилятором и выполняется виртуальной машиной Java (JVM). Вы узнаете, как проверять и оптимизировать байткод. Instrumentation позволяет встраивать агентов в приложения для мониторинга и изменения их поведения. Вы узнаете, как использовать Instrumentation и Agent для различных целей, например, профилирования приложений. Здесь рассматривается управление памятью в Java Virtual Machine (JVM). Вы изучите структуру в JVM и различные типы, такие как heap и stack. Вы исследуете различные алгоритмы сборки мусора (Garbage Collection) в JVM, такие как SerialGC, ParallelGC и CMS GC. Вы узнаете, как они работают и как выбрать подходящий алгоритм для вашего приложения. Вы продолжите изучение алгоритмов сборки мусора в JVM, сосредотачиваясь на алгоритмах G1 и ZGC. Вы узнаете их особенности и сравните их с другими алгоритмами GC. Вы узнаете, как создавать и анализировать дампы памяти (Memory Dumps) в JVM, чтобы выявлять утечки и другие проблемы производительности. Вы разберётесь, в чём заключается использование off-heap, что позволяет обойти ограничения heap и улучшить производительность приложения. Вы пройдёте разбор Class Data Sharing (CDS), технологии в JDK, которая позволяет уменьшить время запуска приложения и использование за счет предварительной загрузки и кэширования классов. Вы узнаете о модульной системе (Project Jigsaw), которая позволяет разделять приложения на модули и управлять зависимостями между ними. Вы погрузитесь в использование различных инструментов JDK, таких как jconsole, jvisualvm, jmc и другие, для мониторинга и отладки приложений. На последнем занятии будет организована сессия вопросов и ответов, где вы сможете задать все интересующие вас вопросы и уточнения по изученным темам.
В данной теме вы узнаете о различиях между разными версиями Java (11, 17, 21), а также о различиях между OpenJDK и OracleJDK. Будет рассмотрено, как выбрать подходящую версию для вашего проекта.
Здесь вы погрузитесь в мир байткода: промежуточного кода, который генерируется компилятором и выполняется виртуальной машиной Java (JVM). Вы узнаете, как проверять и оптимизировать байткод.
Instrumentation позволяет встраивать агентов в приложения для мониторинга и изменения их поведения. Вы узнаете, как использовать Instrumentation и Agent для различных целей, например, профилирования приложений.
Здесь рассматривается управление памятью в Java Virtual Machine (JVM). Вы изучите структуру в JVM и различные типы, такие как heap и stack.
Вы исследуете различные алгоритмы сборки мусора (Garbage Collection) в JVM, такие как SerialGC, ParallelGC и CMS GC. Вы узнаете, как они работают и как выбрать подходящий алгоритм для вашего приложения.
Вы продолжите изучение алгоритмов сборки мусора в JVM, сосредотачиваясь на алгоритмах G1 и ZGC. Вы узнаете их особенности и сравните их с другими алгоритмами GC.
Вы узнаете, как создавать и анализировать дампы памяти (Memory Dumps) в JVM, чтобы выявлять утечки и другие проблемы производительности.
Вы разберётесь, в чём заключается использование off-heap, что позволяет обойти ограничения heap и улучшить производительность приложения.
Вы пройдёте разбор Class Data Sharing (CDS), технологии в JDK, которая позволяет уменьшить время запуска приложения и использование за счет предварительной загрузки и кэширования классов.
Вы узнаете о модульной системе (Project Jigsaw), которая позволяет разделять приложения на модули и управлять зависимостями между ними.
Вы погрузитесь в использование различных инструментов JDK, таких как jconsole, jvisualvm, jmc и другие, для мониторинга и отладки приложений.
На последнем занятии будет организована сессия вопросов и ответов, где вы сможете задать все интересующие вас вопросы и уточнения по изученным темам.
Многопоточность и производительность
Вы узнаете о библиотеке Microbenchmark Harness, которая позволяет проводить микробенчмаркинг и измерять производительность кода. Вы выполните практическое задание по работе с этой библиотекой. Вы изучите инструмент JMeter и научитесь организовывать нагрузочное тестирование. Вы выполните задание по созданию тестовых сценариев и анализу результатов. В этой теме будет рассмотрено использование различных классов из пакета, таких как Atomics, HashMap и SkipListMap, для обеспечения потокобезопасности в приложениях. Здесь будет углубленное изучение темы с блокировками посредством классов Locks, ReadWriteLock и ReentrantLock из пакета java.util.concurrent. Вы узнаете, как правильно использовать и управлять блокировками в многопоточных средах. В теме будет рассмотрены различные механизмы синхронизации и координации потоков из пакета, такие как CountDownLatch, Semaphore и Phaser. Вы узнаете, как использовать их для организации совместной работы потоков. Здесь будет изучено профилирование приложений с использованием инструментов Thread dump и Flight Recorder (JFR). Вы выполните задание по анализу производительности. В этой теме вы продолжите изучение, работая с инструментами jvisualvm и asyncProfiler. Вы выполните задание по анализу и оптимизации. В данной теме будет рассмотрено как улучшить производительность на HotSpot JVM путем оптимизации кода, настройки JVM и других методов. Вы узнаете о советах и лучших практиках по повышению производительности. Здесь вы узнаете о NIO (New Input/Output), альтернативном и более эффективном подходе к работе с сетевыми операциями. В этой теме будет рассмотрено реактивное программирование с использованием библиотеки Reactor. Вы изучите основные концепции и принципы реактивного программирования и выполните задание по работе с Reactor. Здесь вы узнаете о методах оптимизации производительности, написанных с использованием реактивного программирования на библиотеке Reactor. На последнем занятии будет проведена сессия вопросов и ответов, где вы сможете задать любые вопросы по изученным темам и уточнить неясности.
Вы узнаете о библиотеке Microbenchmark Harness, которая позволяет проводить микробенчмаркинг и измерять производительность кода. Вы выполните практическое задание по работе с этой библиотекой.
Вы изучите инструмент JMeter и научитесь организовывать нагрузочное тестирование. Вы выполните задание по созданию тестовых сценариев и анализу результатов.
В этой теме будет рассмотрено использование различных классов из пакета, таких как Atomics, HashMap и SkipListMap, для обеспечения потокобезопасности в приложениях.
Здесь будет углубленное изучение темы с блокировками посредством классов Locks, ReadWriteLock и ReentrantLock из пакета java.util.concurrent. Вы узнаете, как правильно использовать и управлять блокировками в многопоточных средах.
В теме будет рассмотрены различные механизмы синхронизации и координации потоков из пакета, такие как CountDownLatch, Semaphore и Phaser. Вы узнаете, как использовать их для организации совместной работы потоков.
Здесь будет изучено профилирование приложений с использованием инструментов Thread dump и Flight Recorder (JFR). Вы выполните задание по анализу производительности.
В этой теме вы продолжите изучение, работая с инструментами jvisualvm и asyncProfiler. Вы выполните задание по анализу и оптимизации.
В данной теме будет рассмотрено как улучшить производительность на HotSpot JVM путем оптимизации кода, настройки JVM и других методов. Вы узнаете о советах и лучших практиках по повышению производительности.
Здесь вы узнаете о NIO (New Input/Output), альтернативном и более эффективном подходе к работе с сетевыми операциями.
В этой теме будет рассмотрено реактивное программирование с использованием библиотеки Reactor. Вы изучите основные концепции и принципы реактивного программирования и выполните задание по работе с Reactor.
Здесь вы узнаете о методах оптимизации производительности, написанных с использованием реактивного программирования на библиотеке Reactor.
На последнем занятии будет проведена сессия вопросов и ответов, где вы сможете задать любые вопросы по изученным темам и уточнить неясности.
Облачные технологии
В данной теме вы вспомните основные понятия и возможности Docker, такие как контейнеризация, создание образов, работа с контейнерами, сети и томами данных. Выполним практическое задание по работе с Docker. Здесь вы погрузитесь в мир Kubernetes и изучим основные концепции, такие как поды, сервисы, неймспейсы, деплойменты и многое другое. Вы узнаете, как использовать Kubernetes для оркестрации и управления контейнеризированными приложениями. В этой теме рассмотрите инструмент Helm, который позволяет управлять установкой, обновлением и удалением приложений в Kubernetes с помощью шаблонов. Вы выполните практическое задание по созданию и установке Helm-чартов. Здесь вы изучите важность сбора и анализа метрик в микросервисной архитектуре. Вы узнаете о различных типах метрик, их сборе, агрегации и визуализации для мониторинга и оптимизации работы приложений. Вы погрузитесь в инструменты мониторинга Prometheus и визуализации Grafana. Вы научитесь настраивать сбор метрик с помощью Prometheus, а также создавать красивые дашборды для мониторинга с Grafana. Вы рассмотрите концепцию сквозного логирования (distributed tracing) в микросервисных приложениях и изучим инструменты, такие как OpenTracing, Jaeger и Zipkin, для мониторинга и анализа логов. Вы обсудите основные принципы проектирования и архитектуры микросервисов, такие как декомпозиция, границы контекста, коммуникация и многое другое. Вы узнаете, как разрабатывать масштабируемые и устойчивые микросервисные системы. Вы поучаствуете в сессии вопросов и ответов, где вы сможете задать любые вопросы по изученным темам о микросервисах и получить подробные ответы от преподавателя.
В данной теме вы вспомните основные понятия и возможности Docker, такие как контейнеризация, создание образов, работа с контейнерами, сети и томами данных. Выполним практическое задание по работе с Docker.
Здесь вы погрузитесь в мир Kubernetes и изучим основные концепции, такие как поды, сервисы, неймспейсы, деплойменты и многое другое. Вы узнаете, как использовать Kubernetes для оркестрации и управления контейнеризированными приложениями.
В этой теме рассмотрите инструмент Helm, который позволяет управлять установкой, обновлением и удалением приложений в Kubernetes с помощью шаблонов. Вы выполните практическое задание по созданию и установке Helm-чартов.
Здесь вы изучите важность сбора и анализа метрик в микросервисной архитектуре. Вы узнаете о различных типах метрик, их сборе, агрегации и визуализации для мониторинга и оптимизации работы приложений.
Вы погрузитесь в инструменты мониторинга Prometheus и визуализации Grafana. Вы научитесь настраивать сбор метрик с помощью Prometheus, а также создавать красивые дашборды для мониторинга с Grafana.
Вы рассмотрите концепцию сквозного логирования (distributed tracing) в микросервисных приложениях и изучим инструменты, такие как OpenTracing, Jaeger и Zipkin, для мониторинга и анализа логов.
Вы обсудите основные принципы проектирования и архитектуры микросервисов, такие как декомпозиция, границы контекста, коммуникация и многое другое. Вы узнаете, как разрабатывать масштабируемые и устойчивые микросервисные системы.
Вы поучаствуете в сессии вопросов и ответов, где вы сможете задать любые вопросы по изученным темам о микросервисах и получить подробные ответы от преподавателя.
Протоколы взаимодействия
Вы узнаете о протоколе REST, а также о спецификациях Swagger и OpenAPI, которые позволяют описывать и документировать API. В домашнем задании вы применитеэти знания для создания и документирования RESTful API. Здесь мы изучим сериализацию данных с использованием Protobuf и протокол взаимодействия gRPC. Вы научитесь создавать и использовать сильно типизированные сервисы и передавать данные между ними. В этой теме вы погрузитесь в технологию Apache Kafka, которая предоставляет распределенную систему потоковых данных. Вы обсудите важность балансировки нагрузки в распределенных системах и изучите различные методы ее настройки. Вы узнаете, как правильно настраивать балансировщики нагрузки для обеспечения высокой доступности и производительности приложений. Вы узнаете о принципах резервирования, транзакционной поддержке, асинхронной обработке и других подходах к обеспечению стабильности приложений. Вы научитесь создавать и настраивать задания, планировать их выполнение в соответствии с расписанием. Вы узнаете, какие проблемы могут возникнуть при разработке на Java и как их избежать. Вы сможете задать любые вопросы по изученным темам о разработке на Java и получить детальные ответы от преподавателя.
Вы узнаете о протоколе REST, а также о спецификациях Swagger и OpenAPI, которые позволяют описывать и документировать API. В домашнем задании вы применитеэти знания для создания и документирования RESTful API.
Здесь мы изучим сериализацию данных с использованием Protobuf и протокол взаимодействия gRPC. Вы научитесь создавать и использовать сильно типизированные сервисы и передавать данные между ними.
В этой теме вы погрузитесь в технологию Apache Kafka, которая предоставляет распределенную систему потоковых данных.
Вы обсудите важность балансировки нагрузки в распределенных системах и изучите различные методы ее настройки. Вы узнаете, как правильно настраивать балансировщики нагрузки для обеспечения высокой доступности и производительности приложений.
Вы узнаете о принципах резервирования, транзакционной поддержке, асинхронной обработке и других подходах к обеспечению стабильности приложений.
Вы научитесь создавать и настраивать задания, планировать их выполнение в соответствии с расписанием.
Вы узнаете, какие проблемы могут возникнуть при разработке на Java и как их избежать.
Вы сможете задать любые вопросы по изученным темам о разработке на Java и получить детальные ответы от преподавателя.
Проектная работа
Вы определитесь с темой, которой посвятите свою проектную работу. Вы обсудите трудности ли нюансы выполнения проекта. Вы завершите обучение на курсе и представите его итог.
Вы определитесь с темой, которой посвятите свою проектную работу.
Вы обсудите трудности ли нюансы выполнения проекта.
Вы завершите обучение на курсе и представите его итог.